package br.com.esrestaurante.faces;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.esrestaurante.dao.ContaDAO;
import br.com.esrestaurante.dao.PedidoDAO;
import br.com.esrestaurante.entidades.Conta;
import br.com.esrestaurante.entidades.Oferecimento;
import br.com.esrestaurante.entidades.Pedido;

public class RealizarPagamentoContaFaces extends Faces{
	
	private List<Conta> listaContasAbertas;
	
	private Conta contaSelecionada;
	
	public RealizarPagamentoContaFaces() {

		this.buscarContasAbertar();

	}
	
	public void buscarContasAbertar(){
		
		List<Conta> lista = new ContaDAO().listarContas();
		listaContasAbertas = new ArrayList<Conta>();
		
		for(Conta conta: lista){
			if(conta.getDataPagamento() == null && conta.getDataEncerramento() != null){
				float valorTotal = 0f;				
				conta.setListaProdutos(new ArrayList<Oferecimento>());				
				List<Pedido> listaPedido = new PedidoDAO().recuperarPedidosPorConta(conta);				
				conta.setListaProdutos(new ArrayList<Oferecimento>());
				for(Pedido pedido : listaPedido){
					if(pedido.getDataEntrega() != null){
						int quantidade = pedido.getQuantidade();
						for(int i = 1; i <= quantidade;i++){
							conta.getListaProdutos().add(pedido.getOferecimento());
							
						}
						valorTotal += pedido.getValorTotal();		
					}
													
				}
				conta.setValorTotal(valorTotal);
				listaContasAbertas.add(conta);
			}
		}
		
	}
	
	public String efetuarPagamento(){
		
		Calendar dataAtual = Calendar.getInstance();
		
		Conta conta =  new Conta();
		List <Conta> contas = new ContaDAO().listarContas();
		for(Conta c: contas){
			if(c.getId() == contaSelecionada.getId()){
				conta = c;
			}
		}
		
		conta.setDataPagamento(dataAtual);
		
		new ContaDAO().salvar(conta);
		this.buscarContasAbertar();
		
		adicionarMsgAviso("Conta Fechada com sucesso!", "");
		return "toRealizarPagamento";
	}

	public List<Conta> getListaContasAbertas() {
		return listaContasAbertas;
	}

	public void setListaContasAbertas(List<Conta> listaContasAbertas) {
		this.listaContasAbertas = listaContasAbertas;
	}

	public Conta getContaSelecionada() {
		return contaSelecionada;
	}

	public void setContaSelecionada(Conta contaSelecionada) {
		this.contaSelecionada = contaSelecionada;
	}

}
